const fp = require('lodash/fp');

const cars = [
  {
    name: 'Ferrari FF',
    horsepower: 660,
    dollar_value: 7000000,
    in_stock: true
  },
  {
    name: 'Spyker C12 Zagato',
    horsepower: 650,
    dollar_value: 6480000,
    in_stock: false
  },
  {
    name: 'Jaguar XKR-S',
    horsepower: 550,
    dollar_value: 1320000,
    in_stock: false
  },
  {
    name: 'Audi R8',
    horsepower: 525,
    dollar_value: 114200,
    in_stock: false
  },
  {
    name: 'Aston Martin One-77',
    horsepower: 750,
    dollar_value: 1850000,
    in_stock: true
  },
  {
    name: 'Pagani Huayra',
    horsepower: 700,
    dollar_value: 1300000,
    in_stock: true
  },
  {
    name: 'Ferrari FF',
    horsepower: 660,
    dollar_value: 7000000,
    in_stock: false
  }
]

/**
 * 练习1
 * 重构
 * let isLastInStock = function(cars) {
  // 获取最后一条数据
  let last_car = fp.last(cars)
  // 获取最后一条数据的 in_stock 属性值
  return fp.prop('in_stock', last_car)
}
 * 
 * */ 
const lastInStock = fp.flowRight(fp.prop('in_stock'),fp.last)
console.log(lastInStock(cars))

/**
 * 练习2
*/

console.log(fp.flowRight(fp.prop('name'),fp.first)(cars))

/**
 * 练习3
 * 重构
 * let averageDollarValue = function (cars) {
  let dollar_values = fp.map(function(car) { return car.dollar_value }, cars)
  return _average(dollar_values)
}
 * 
*/
let _average = function(xs) { return fp.reduce(fp.add, 0, xs) / xs.length }
const averageDollarValue = fp.flowRight(_average, fp.map('dollar_value'))
console.log(averageDollarValue(cars))

/**
 * 练习4
 * */ 

let _underscore = fp.replace(/\W+/g, '_');

const sanitizeNames = fp.flowRight(fp.map(_underscore), fp.map('name')) ;

console.log(sanitizeNames(cars))